package designMode.abstractFactoryPattern;
//
//抽象工厂提供一个创建一系列相关或相互依赖对象的接口，
//        简单来说不是仅生产一个产品，而是一个系列产品。
// 使用抽象工厂创建产品

/*工厂方法模式：

        关注创建单一产品对象。
        使用子类来决定创建哪个具体产品。
        工厂类不负责所有产品的创建
        扩展性较好，新增一种产品时，只需要增加相应的具体产品类和相应的工厂子类即可。
  抽象工厂模式：
        关注创建一系列相关或相互依赖的产品对象。
        提供一个接口，用于创建多个产品族的对象。
        增加新的产品族较为容易，但增加新产品类型较为困难。
        （比如要加个 createProductC，所有实现具体工厂的代码都得改）*/
public class Client {
    public static void main(String[] args) {
        AbstractFactory factory1 = new ConcreteFactory1();
        ProductA productA1 = factory1.createProductA();
        ProductB productB1 = factory1.createProductB();
        productA1.use();
        productB1.eat();

        AbstractFactory factory2 = new ConcreteFactory2();
        ProductA productA2 = factory2.createProductA();
        ProductB productB2 = factory2.createProductB();
        productA2.use();
        productB2.eat();
    }
}
